package main

import (
	"fmt"
	"github.com/influxdata/platform/kit/errors"
	"io/ioutil"
)

func loadConfig() error {
	_, err := ioutil.ReadFile("./config.ini")
	if err != nil {
		return errors.Wrap(err, "read failed")
	}
	return err
}
func setup() error {
	err := loadConfig()
	if err != nil {
		return errors.Wrap(err, "invalid config")
	}
	return err
}

func main() {
	// 1) 普通方式
	//if err := setup(); err != nil {
	//	log.Fatal(err)
	//}
	// 2) 错误堆栈信息
	err := setup()
	for i, e := range err.(errors.Error).Wraped() {
		fmt.Printf("wraped(%d): %v\n", i, e)
	}
	// 同时也可以获取每个包装错误的函数调用堆栈信息：
	for i, x := range err.(errors.Error).Caller() {
		fmt.Printf("caller:%d: %s\n", i, x.FuncName)
	}
}
